-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Improve Ensoniq VFX-family display #14131
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
5de0022
to
1980286
Compare
IMO commits in esqpanel related to the web interface and the attached javascript file should be limited to life support (eg. fixing a critical bug) or gradually removing things. I hope MAME will eventually have internal artwork (.lay files) for these and the web interface can be removed. Maybe even emu/http.* can be removed too if we have no use for it anymore. Regarding adding digit segment SVGs to MAME: |
I disagree: I find the web interface to be very useful. It allows someone to simulate these keyboards in a way that basically matches how one would use the real thing: with a PC running the emulator, a MIDI keyboard for the, well, keyboard input, and the control control panel available through the web interface on a tablet together with the MID keyboard. Accessing the control panel in the web browser can be done on a phone or tablet that has a multi-touch capable display, even when people don't have a touch-capable main screen, so that makes it that much more accessible to actually use. And the Ensoniq VFX family of keyboards certainly have button press combinations that are fairly far apart: "Preset" + "Compare" is used to show analog values, for example. So as I don't have a touch screen on my PC where I'm developing this, I can bring up the web interface in my phone to access that button combination that I would otherwise be unable to press.
I took photos of the display on my keyboard, converted them to monochrome, and traced them myself. They are also the same segments already used in the web panel. I actually think their specific shape seems to be largely the result of the manufacturing process, rather than a specific design: if you look, the empty space between the segments is pretty constant. It looks like someone effectively looked at a character cell, and drew thick lines separating the segment, leaving the rest as the actual segments to be lit up.
The brightness in the photo is rather exaggerated due to lighting and my phone camera. I actually did some experiments when I first added the web interface, stroking the segments as well as filling them when they were lit (see https://github.com/cbrunschen/mame/blob/master/web/esqpanel/vfx/FrontPanel.js#L243); but it ended up looking wrong when compared to the real display. |
I don’t want to be going down the path of bundling images for specific display models. I’d rather keep the internal stuff generic and allow people to provide more precise representations of specific models in external artwork if they want to. The current internal web server implementation (actually the second iteration) is problematic in many ways. But a big problem with system-specific stuff in it right now is that it’s effectively unmaintained, and hence likely to rot. It’s too far outside what most MAME developers are going to test, so realistically, it won’t be updated for code changes. |
ca02288
to
5b8eb94
Compare
The main aim of the refactoring for the VFX family was to consolidate the panel command processing into the But in order to not remove functionality that I'm currently using, the ability to interact with the emulated keyboard, i.e., to prevent breakage of something that was fundamentally working, FrontPanel.js has to be able to handle some simpler, lower-level instructions from That's all that I'm doing to the web interface. It doesn't change the level of integration. If anything, the lower-level instructions would be easier to implement in something other than a web interface, since they don't require the command processing that has now been consolidated into the |
643b027
to
f23d124
Compare
I've updated this to replace the web interface with a much simpler external panel device, which runs a small Separately I have a small project that talks to this new external panel and presents the web interface, as a working proof of concept as well as for my own actual use. Once these changes land I will of course make that available (and am happy to share privately before that, too). |
717c3c0
to
d063694
Compare
Some more updates that might please some: Layout-based front panels. Spacing of elements etc based on measuring my real VFX-SD and SD-1/32. These work together with the external panel (which is no longer web based, as before), such that each shows any buttons that are pressed the other, and of course also the Volume and Data Entry sliders. The panels are similar but different enough that I actually write a small program that can generate all three variants. Any comments would be greatly appreciated. |
Wow! These are looking amazing! |
And, to be honest, it was the very first time I was able to try playing music with these drivers and they sound fantastic as well! When they lacked internal layout, they were counter-intuitive to use and the web front-end was too hard to setup (I remember I had tried and failed!). Don't get me wrong! I think the web-based UI has its legitimate uses as you already described, and we should not close that door. But having functional internal layout is more important, so that more people can easily use it. And I see this PR moving in the right direction. Great work being done here! |
I'm glad you like the panels! I do too. I've never had any trouble accessing the web frontend: I build MAME, run one of the VFX-family of keyboards with the simplescreenrecorder-2025-09-16_19.41.17.mp4But be that as it may, this PR now removes that integration so the point is rather moot. I can understand not wanting MAME to include something as unrelated as an entire web server. |
@cuavas Where are we at on this? It looks like he's addressed all the comments, including removing the usage of the web interface, and this would be nice to have in for the branch. |
94c7330
to
9181adc
Compare
I too would love to make progress on this. I believe I have addressed all the comments I've received so far. More commends and other feedback are of course also welcome! |
d3187eb
to
bce89f7
Compare
@cuavas Some feedback on this approach would be appreciated. This would allow us to get rid of the web server entirely and Christian has a bunch of emulation improvements waiting behind it, including loading floppy images created on real hardware and having them play correctly. |
@cuavas The external panel is now removed, does that work? |
…ady" message is shown, by clearing the screen and ignoring things otherwise. This seems to behave much like the real display does.
… the Ensoniq keyboards. Instead, add a new external panel class, that runs a simple asio-based TCP socket server, heavily based on cps2comm, that will serve one client at a time. This uses the existing comm_local{host,port} flags to specify where to listen for connections.
…end them to the external panel.
… reproducing the panels quite closely. UI elements are kept in sync between the internal, layout-based panel, and any external panel.
… when showing sequences. Pass the actual ASCII characters to the VFD and external panel.
…Only subtract the font offset (where only chars from SPACE on are present) when getting the segments from the font.
… used on the EnvX Times screen, looks correct now.
…r can advance past column 39, wrapping to trhe next row.
As there seems to be no movement on this, closing. |
@cbrunschen Sometimes life has a habit of getting away from team members, and as an all-volunteer project, there's a razor-thin number of folks who actively review pull requests. Just because your changes languished for a bit doesn't mean nobody's interested, it just means that the folks with the experience to review them have been preoccupied by other things. Burnout is a very real problem in the emulation scene, and I tend to think it better for folks to take care of themselves, their families, and their obligations on their own side of the keyboard above all else. I understand where you're coming from, as your previous pull requests have tended to be merged in a timely manner - but it's not a personal slight against you that this one hasn't been. It's just pure luck, really, that the past ones were, and unluckiness that this one wasn't. I would encourage you to recover your changes and reopen the pull request, because you've been doing some damn fine work on synthesizers, and it would be unfortunate to lose you as a contributor just due to what appears to be some miscommunication (or lack of communication entirely) on the part of the team. |
Thank you for your kind words. But honestly, this PR was also losing its focus a bit, so taking a different tack is probably not a bad idea anyway. I've opened #14358 that focuses solely on adding the internal layout panels, which are really the change that will be the biggest improvement for most people. It also now has a single commit, rather than a long sequence of things that partly undo each other. Other aspects can be looked at separately, instead of in a PR that does several unrelated things in one go. |
As long as you're keeping the major functional changes alive, that brings joy to my life. I just don't want you thinking that if one of your PRs languishes for a while, it's a personal slight. It's just the fickleness of life playing out. MAME isn't going to magically become the Therac-25 and start blasting people with an unbound radiation source if a particular PR doesn't go in fast enough. If you're not hearing anything, that's usually some pretty good news. |
This adds a layout for the NEC FIP80B5R display as used in various Ensoniq keyboards; this layout is based on traced segments from photos of an actual display.
Before:
After:

Photo of real display:

It also refactors the display & panel classes used by the VFX family of keyboards, consolidating display command processing into a single place.
This makes minimal changes to related display & panel classes for other related keyboards, so as to not disturb in particular the recent excellent changes to the ESQ1 (and SQ80) keyboard panel, which inspired me to try to start some improvements for the VFX family as well.